package view;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import controller.SistemaTelefonia;

public class AltaPlanPaquete extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel;

	private JTextField nombrePlan = new JTextField();	

	private String[] labels = { "Nombre de nuevo Plan" };
	private JTextField[] textFields = { nombrePlan };

	private JButton alta;
	private JButton guardar;

	private final NuevoPlanPaqueteView nuevoPlanView;

	private SistemaTelefonia sistema;
	private Vector<String> columnas = new Vector<String>();
	private final JTable jTable1 = new JTable();

	public AltaPlanPaquete(SistemaTelefonia s) {
		super();

		sistema = s;
		nuevoPlanView = new NuevoPlanPaqueteView();
		initGUI();
	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			generateInputs();

			columnas.add("Plan Id");
			columnas.add("Nombre");
			columnas.add("Facturable");

			Vector datos = sistema.getPlanesAgregablesPaquete();
			TableModel jTable1Model = new DefaultTableModel(datos, columnas);

			getContentPane().add(jTable1);
			getContentPane().add(jTable1.getTableHeader(), BorderLayout.NORTH);
			jTable1.setModel(jTable1Model);
			jTable1.setBounds(14, 14, 350, 189);
			jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			jTable1.setLocation(new java.awt.Point(0, 4));

			getContentPane().add(jTable1);

			alta = new JButton();
			getContentPane().add(alta);
			alta.setText("Agregar Plan");
			alta.setBounds(200, 200, 150, 28);
			alta.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					try {

						if (jTable1.getSelectedRow() < 0)
							throw new Exception("Debe seleccionar un plan!.");

						int planId = Integer.parseInt(jTable1.getValueAt(
								jTable1.getSelectedRow(), 0).toString());

						nuevoPlanView.addPlan(planId);

						JOptionPane.showMessageDialog(
								getContentPane(),
								"El plan "
										+ jTable1.getValueAt(
												jTable1.getSelectedRow(), 1)
												.toString()
										+ " ha sido agregado.");						

					} catch (Exception e) {
						JOptionPane.showMessageDialog(getContentPane(),
								e.getMessage());

					}
				}
			});

			guardar = new JButton();
			getContentPane().add(guardar);
			guardar.setText("Guardar Nuevo Plan");
			guardar.setBounds(200, 300, 150, 28);
			guardar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					try {

						nuevoPlanView.setNombre(nombrePlan.getText());						
						
						sistema.crearPlanPaquete(nuevoPlanView);

						JOptionPane
								.showMessageDialog(getContentPane(),
										"El plan nuevo plan ha sido guardado correctamente.");
						
						sistema.reloadData();
						setVisible(false);

					} catch (Exception e) {
						JOptionPane.showMessageDialog(getContentPane(),
								e.getMessage());

					}
				}
			});

			pack();
			setTitle("Nuevo Plan Paquete");
			setSize(370, 400);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void generateInputs() {
		int y = 250;

		for (String label : labels) {
			generateLabel(label, 10, y);
			y += 50;
		}

		y = 250;
		for (JTextField textField : textFields) {
			generateInput(textField, 160, y);
			y += 50;
		}		
		
	}

	private void generateInput(JTextField textField, int x, int y) {
		// textField = new JTextField();
		getContentPane().add(textField);
		textField.setBounds(x, y, 190, 28);
	}

	private void generateLabel(String label, int x, int y) {

		jLabel = new JLabel();
		jLabel.setText(label);
		jLabel.setBounds(x, y, 150, 28);
		getContentPane().add(jLabel);
	}
}
